using System;
using System.Collections.Generic;

namespace LegoBotPrimaAbstractions
{
    public interface IBotAction : IDisposable, IEnumerable<IBotAction>
    {
        int ResultMessage { get; }
        int Generation { get; }
        IBotAction PreviousAction { get; set; }
        IBotAction RequestedNextAction { get; }
        ILegoBotPrimaWorkflow Workflow { get; set; }
        IWorkflowLogger Logger { get; set; }
        void Initialize();

        bool IsRunning { get; }
        void OnCompassChanged(double degrees, DateTime timeStamp);
        void OnBumperChanged(bool touchSensorOn, DateTime timeStamp, string bumperName);
        void OnDistanceChanged(int distance, DateTime timeStamp);
        void OnAccelerometerChanged(double x, double y, double z, DateTime timeStamp);
        void OnTimerTick(int tickNimber);

        void MarkStart();
        void MarkStop();
        
    }
}